package cn.com.forever.LinkedList;

/*
    分别按照二叉树先序，中序和后序打印所有的节点。(递归实现)
 */

import java.util.ArrayList;

public class BinaryTreeOrder {
    ArrayList<Integer> pre = new ArrayList<>();
    ArrayList<Integer> in = new ArrayList<>();
    ArrayList<Integer> post = new ArrayList<>();

    public static void main(String[] args) {

    }
    public int[][] threeOrders(TreeNode root){
        if(root == null){
            return new int[][] {{}};
        }
        ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
        preOrder(root);
        inOrder(root);
        postOrder(root);
        ans.add(pre);
        ans.add(in);
        ans.add(post);
        int[][] res = new int[ans.size()][ans.get(0).size()];
        for (int i = 0; i < ans.size(); i++) {
            for (int j = 0; j < ans.get(i).size(); j++) {
                res[i][j] = ans.get(i).get(j);
            }
        }
        return res;
    }
    public void preOrder(TreeNode Node){
        if(Node == null){
            return ;
        }
        pre.add(Node.val);
        preOrder(Node.left);
        preOrder(Node.right);
    }
    public void inOrder(TreeNode Node){
        if(Node == null){
            return ;
        }
        inOrder(Node.left);
        in.add(Node.val);
        inOrder(Node.right);
    }
    public void postOrder(TreeNode Node){
        if(Node == null){
            return ;
        }
        postOrder(Node.left);
        postOrder(Node.right);
        post.add(Node.val);
    }
}
